package com.ssy.lingxi.order.service.base;

import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.order.entity.OrderTradeProcessDO;
import com.ssy.lingxi.order.model.bo.PayNodeBO;
import com.ssy.lingxi.order.model.vo.process.request.OrderTradeProcessPaymentGroupVO;
import com.ssy.lingxi.order.model.vo.process.response.OrderTradeProcessPaymentDetailGroupVO;

import java.util.List;

/**
 * 交易流程关联的支付配置相关接口
 * @author 万宁
 * @version 2.0.0
 * @date 2021-07-25
 */
public interface IBaseOrderTradeProcessPaymentService {
    /**
     * 校验支付环节配置
     * @param payTimes     基础流程设置的支付次数
     * @param payNodes     基础流程设置的支付环节
     * @param paymentList  接口参数
     * @return 校验结果
     */
    Wrapper<Void> checkPayments(Integer payTimes, List<PayNodeBO> payNodes, List<OrderTradeProcessPaymentGroupVO> paymentList);

    /**
     * 保存支付环节配置，调用方要保存OrderTradeProcessDO
     * @param tradeProcess 交易流程规则配置
     * @param payTimes     基础流程设置的支付次数
     * @param payNodes     基础流程设置的支付环节
     * @param paymentList  接口参数
     */
    void savePayments(OrderTradeProcessDO tradeProcess, Integer payTimes, List<PayNodeBO> payNodes, List<OrderTradeProcessPaymentGroupVO> paymentList);

    /**
     * 更新支付环节配置，调用方要保存OrderTradeProcessDO
     * @param tradeProcess 交易流程规则配置
     * @param payTimes     基础流程设置的支付次数
     * @param payNodes     基础流程设置的支付环节
     * @param paymentList  接口参数
     */
    void updatePayments(OrderTradeProcessDO tradeProcess, Integer payTimes, List<PayNodeBO> payNodes, List<OrderTradeProcessPaymentGroupVO> paymentList);

    /**
     * 查询支付环节配置列表
     * @param tradeProcess 交易流程规则配置
     * @return 支付环节配置列表
     */
    List<OrderTradeProcessPaymentDetailGroupVO> findPayments(OrderTradeProcessDO tradeProcess);
}
